
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<HTML>

<HEAD>
   <TITLE>mxmtg_c</TITLE>
</HEAD>

<BODY style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<A name="TOP"></A>

<table style="text-align: left; margin-left: auto; margin-right: auto; width: 800px;"
 border="0" cellpadding="5" cellspacing="2">
  <tbody>
    <tr>
      <td style="background-color: rgb(153, 153, 153); vertical-align: middle; text-align: center;">
      <div align="right"> 
      <small><small><a href="index.html">Index Page</a></small></small>
      </div>
      <b>mxmtg_c</b> </td>
    </tr>

    <tr>
      <td style="vertical-align: top;">

<small><div align="center">
<A HREF="index.html#A">A</A>&nbsp;
<A HREF="index.html#B">B</A>&nbsp;
<A HREF="index.html#C">C</A>&nbsp;
<A HREF="index.html#D">D</A>&nbsp;
<A HREF="index.html#E">E</A>&nbsp;
<A HREF="index.html#F">F</A>&nbsp;
<A HREF="index.html#G">G</A>&nbsp;
<A HREF="index.html#H">H</A>&nbsp;
<A HREF="index.html#I">I</A>&nbsp;
<A HREF="index.html#J">J</A>&nbsp;
<A HREF="index.html#K">K</A>&nbsp;
<A HREF="index.html#L">L</A>&nbsp;
<A HREF="index.html#M">M</A>&nbsp;
<A HREF="index.html#N">N</A>&nbsp;
<A HREF="index.html#O">O</A>&nbsp;
<A HREF="index.html#P">P</A>&nbsp;
<A HREF="index.html#Q">Q</A>&nbsp;
<A HREF="index.html#R">R</A>&nbsp;
<A HREF="index.html#S">S</A>&nbsp;
<A HREF="index.html#T">T</A>&nbsp;
<A HREF="index.html#U">U</A>&nbsp;
<A HREF="index.html#V">V</A>&nbsp;
<A HREF="index.html#W">W</A>&nbsp;
<A HREF="index.html#X">X</A>&nbsp;
</div></small>
       <br>
       <table style="text-align: left; width: 60%; margin-left: auto; margin-right: auto;"
       border="0" cellspacing="2" cellpadding="2">
        <tbody>
          <tr>
            <td style="width: 50%; text-align: center;">
            <small>
              <a href="#Procedure">Procedure<br></a>
              <a href="#Abstract">Abstract<br></a>
              <a href="#Required_Reading">Required_Reading<br></a>
              <a href="#Keywords">Keywords<br></a>
              <a href="#Brief_I/O">Brief_I/O<br></a>
              <a href="#Detailed_Input">Detailed_Input<br></a>

              </small>
              </td>
              <td style="vertical-align: top; width: 50%; text-align: center;">
              <small>               <a href="#Detailed_Output">Detailed_Output<br></a>
              <a href="#Parameters">Parameters<br></a>
              <a href="#Exceptions">Exceptions<br></a>
              <a href="#Files">Files<br></a>
              <a href="#Particulars">Particulars<br></a>
              <a href="#Examples">Examples<br></a>

              </small>
              </td>
              <td style="vertical-align: top; width: 50%; text-align: center;">
              <small>               <a href="#Restrictions">Restrictions<br></a>
              <a href="#Literature_References">Literature_References<br></a>
              <a href="#Author_and_Institution">Author_and_Institution<br></a>
              <a href="#Version">Version<br></a>
              <a href="#Index_Entries">Index_Entries<br></a>
             </small>
            </td>
          </tr>
        </tbody>
</table>

<h4><a name="Procedure">Procedure</a></h4>
<PRE>
   void mxmtg_c ( const void   * m1,
                  const void   * m2,
                  SpiceInt       nrow1,
                  SpiceInt       nc1c2,
                  SpiceInt       nrow2,
                  void         * mout  )
</PRE>
<h4><a name="Abstract">Abstract</a></h4>
<PRE>
   Multiply a matrix and the transpose of a matrix, both of
   arbitrary size.
</PRE>
<h4><a name="Required_Reading">Required_Reading</a></h4>
<PRE>
   None.
</PRE>
<h4><a name="Keywords">Keywords</a></h4>
<PRE>
   MATRIX


</PRE>
<h4><a name="Brief_I/O">Brief_I/O</a></h4>
<PRE>
   VARIABLE  I/O  DESCRIPTION
   --------  ---  --------------------------------------------------
   m1         I   Left-hand matrix to be multiplied.
   m2         I   Right-hand matrix whose transpose is to be multiplied
   nrow1      I   Row dimension of m1 and row dimension of mout.
   nc1c2      I   Column dimension of m1 and column dimension of m2.
   nrow2      I   Row dimension of m2 and column dimension of mout.
   mout       O   Product matrix.
</PRE>
<h4><a name="Detailed_Input">Detailed_Input</a></h4>
<PRE>
   m1         may be any double precision matrix of arbitrary size.

   m2         may be any double precision matrix of arbitrary size.
              The number of columns in m2 must match the number of
              columns in m1.

   nrow1      is the number of rows in both m1 and mout.

   nc1c2      i the number of columns in m1 and (by necessity) the
              number of columns of m2.

   nrow2      is the number of rows in both m2 and the number of columns
              in mout.
</PRE>
<h4><a name="Detailed_Output">Detailed_Output</a></h4>
<PRE>
   mout       is the product matrix given by

                                   t
                 mout = (m1) x (m2)


              where the superscript &quot;t&quot; denotes the transpose matrix.
              This is a double precision matrix of dimension nrow1 x
              nrow2.

              mout may overwrite m1 or m2.  Note that this capability
              does not exist in the Fortran version of SPICELIB; in the
              Fortran version, the output must not overwrite either
              input.
</PRE>
<h4><a name="Parameters">Parameters</a></h4>
<PRE>
   None.
</PRE>
<h4><a name="Exceptions">Exceptions</a></h4>
<PRE>
   Error free.
</PRE>
<h4><a name="Files">Files</a></h4>
<PRE>
   None.
</PRE>
<h4><a name="Particulars">Particulars</a></h4>
<PRE>
   The code reflects precisely the following mathematical expression

      For each value of the subscript i from 1 to nrow1, and j from 1
      to nrow2:

      mout(i,j) = summation from k=1 to nc1c2 of  ( m1(i,k) * m2(j,k) )

   Notice that the order of the subscripts of m2 are reversed from
   what they would be if this routine merely multiplied m1 and m2.
   It is this transposition of subscripts that makes this routine
   multiply m1 and the TRANPOSE of m2.
</PRE>
<h4><a name="Examples">Examples</a></h4>
<PRE>
   1)  Let m1 =

          | 1.0  2.0  3.0 |
          |               |
          | 3.0  2.0  1.0 |

       Let m2 =

          | 1.0  2.0  0.0 |
          |               |
          | 2.0  1.0  2.0 |
          |               |
          | 1.0  2.0  0.0 |
          |               |
          | 2.0  1.0  2.0 |

       Here

          nrow1   = 2
          nc1c2   = 3
          nrow2   = 4


       so the call

          <b>mxmtg_c</b> ( m1, m2, nrow1, nc1c2, nrow2, mout );


       produces the matrix


          mout = | 5.0  10.0  5.0  10.0 |
                 |                      |
                 | 7.0  10.0  7.0  10.0 |
</PRE>
<h4><a name="Restrictions">Restrictions</a></h4>
<PRE>
   No error checking is performed to prevent numeric overflow or
   underflow.

   No error checking is performed to determine if the input and
   output matrices have, in fact, been correctly dimensioned.

   The user is responsible for checking the magnitudes of the
   elements of m1 and m2 so that a floating point overflow does
   not occur.
</PRE>
<h4><a name="Literature_References">Literature_References</a></h4>
<PRE>
   None.
</PRE>
<h4><a name="Author_and_Institution">Author_and_Institution</a></h4>
<PRE>
   N.J. Bachman    (JPL)
   W.M. Owen       (JPL)
</PRE>
<h4><a name="Version">Version</a></h4>
<PRE>
   -CSPICE Version 1.2.0, 28-AUG-2001 (NJB)

      Const-qualified input arrays.

   -CSPICE Version 1.1.0, 08-FEB-1998 (NJB)

      Corrected a comment describing the local macro INDEX.   Made
      miscellaneous code format corrections.

   -CSPICE Version 1.0.0, 25-OCT-1997 (NJB)

      Based on SPICELIB Version 1.0.1, 10-MAR-1992 (WLT)
</PRE>
<h4><a name="Index_Entries">Index_Entries</a></h4>
<PRE>
   matrix times matrix_transpose n-dimensional_case
</PRE>
<h4>Link to routine mxmtg_c source file <a href='../../../src/cspice/mxmtg_c.c'>mxmtg_c.c</a> </h4>

      </td>
    </tr>
  </tbody>
</table>

   <pre>Wed Jun  9 13:05:26 2010</pre>

</body>
</html>

